package arithmetic2;

/**
 * @author Ajie
 * @date 4/25/21
 * @function easy
 * <p>
 * 104. 二叉树的最大深度
 * 难度
 * 简单
 * <p>
 * 862
 * <p>
 * 收藏
 * <p>
 * 分享
 * 切换为英文
 * 接收动态
 * 反馈
 * 给定一个二叉树，找出其最大深度。
 * <p>
 * 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
 * <p>
 * 说明: 叶子节点是指没有子节点的节点。
 * <p>
 * 示例：
 * 给定二叉树 [3,9,20,null,null,15,7]，
 * <p>
 * 3
 * / \
 * 9  20
 * /  \
 * 15   7
 */
public class T_104_MaxDepthOfTree {

    public static void main(String[] args) {
        System.out.println(maxDepth(TreeNode.getTreeRootNode()));
    }

    public static int maxDepth(TreeNode root) {

        if (root == null) {
            return 0;
        }
        int max = 1;
        int currentDepth = 0;
        return getMax(root, max, currentDepth);
    }

    //dfs
    private static int getMax(TreeNode root, int max, int currentDepth) {
        if (root == null) {
            return max;
        }
        currentDepth++;
        max = currentDepth > max ? currentDepth : max;
        int max1 = getMax(root.left, max, currentDepth);
        int max2 = getMax(root.right, max, currentDepth);

        int m12 = max1 > max2 ? max1 : max2;
        return m12 > max ? m12 : max;
    }

}
